/**
 * Promis/A+规范
 */

// Promise的可取消功能（也就是我們可以手动的控制promise的状态）
// 通过取消令牌实现
class CancelToken {
  /**
   *
   * @param {} cancel 该方法一调用且第一个函数可以控制是否结束当前promise的状态图
   */
  constructor(cancel) {
    this.promise = new Promise((resolve, reject) => {
      cancel(() => {
        resolve();
      });
    });
  }
}
const cancel = (cancel) => {};
const token = new CancelToken((cancel) => {
  // 自己手动的控制是否提前结束状态
  cancel();
});
token.promise.then();

/**
 * async/await的运行流程
 */

async function foo() {
  console.log(1);
  console.log(await Promise.resolve(5));
  console.log(6);
}

async function bar() {
  console.log(2);
  console.log(await 3);
  console(4);
}

/*  foo();
 bar(); */

async function foo() {
  console.log(2);
  console.log(await Promise.resolve(8));
  console.log(9);
}
async function bar() {
  console.log(4);
  console.log(await 6);
  console.log(7);
}
console.log(1);
foo();
console.log(3);
bar();
console.log(5);
